package cn.linran.result;

import cn.linran.enums.GlobalErrorCode;
import lombok.Data;

import java.math.BigDecimal;
import java.math.BigInteger;

//返回JSON结果
@Data
//建造者模式
//@Builder
public class JSONResult {

    private boolean success = true;

    private String message = "成功";

    //错误码，用来描述错误类型 ，1000 表示没有错误
    private String code = "1000";

    //返回的数据
    private Object data;

    public JSONResult setData(Object data) {
        this.data = data;
        return this;
    }

    /**
     * 重载success方法
     * @return
     */
    public static JSONResult success(){
        return new JSONResult();
    }

    /**
     * 重载success方法
     * @param obj
     * @return
     */
    public static JSONResult success(Object obj){
        JSONResult instance = new JSONResult();
        instance.setData(obj);
        return instance;
    }

    /**
     * 重载success方法
     * @param obj
     * @param code
     * @return
     */
    public static JSONResult success(Object obj,String code){
        JSONResult instance = new JSONResult();
        instance.setCode(code);
        instance.setData(obj);
        return instance;
    }



    /**
     * 重载error方法
     * @param message
     * @param code
     * @return
     */
    public static JSONResult error(String message,String code){
        JSONResult instance = new JSONResult();
        instance.setMessage(message);
        instance.setSuccess(false);
        instance.setCode(code);
        return instance;
    }

    /**
     * 重载error方法
     * @return
     */
    public static JSONResult error(){
        JSONResult jsonResult = new JSONResult();
        jsonResult.setSuccess(false);
        return jsonResult;
    }

    /**
     * 重载error方法
     * @param message
     * @return
     */
    public static JSONResult error(String message){
        return error(message,null);
    }

    /**
     * 重载error方法
     * @param globalErrorCode
     * @return
     */
    public static JSONResult error(GlobalErrorCode globalErrorCode){
        return error(globalErrorCode.getMessage(),globalErrorCode.getCode());

}

    /**
     * object->BigDecimal
     *
     * @param value 价值
     * @return {@link BigDecimal}
     */
    public static BigDecimal getBigDecimal(Object value) {
        BigDecimal ret = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
                ret = (BigDecimal) value;
            } else if (value instanceof String) {
                ret = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
                ret = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
                ret = new BigDecimal(((Number) value).doubleValue());
            } else {
                throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
            }
        }
        return ret;
    }

}
